package net.yla.smartbus.module.ba.dept.mapper;

import com.alibaba.fastjson.JSONObject;
import net.yla.smartbus.module.ba.dept.dto.EmpInfoDTO;
import net.yla.smartbus.module.ba.dept.entity.DeptDO;
import net.yla.smartbus.module.ba.dept.entity.DeptInfoDO;
import net.yla.smartbus.module.ba.dept.entity.GroupChildrenDO;
import net.yla.smartbus.module.ba.dept.query.DeptEmpQuery;
import net.yla.smartbus.module.ba.dept.query.DeptQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @description:
 * @author: Yee
 * @date: 2021/6/17 14:43
 */
@Repository
public interface DeptMapper {
    /**
     * 根据query查询
     *
     * @param query
     * @return
     */
    List<DeptInfoDO> listDeptInfo(DeptQuery query);

    /**
     * 根据query查询数量
     *
     * @param query
     * @return
     */
    Integer countDeptInfo(DeptQuery query);

    /**
     * 根据分组id查询分组名称
     *
     * @param groupId
     * @return
     */
    String selectGroupName(@Param("groupId") Integer groupId);

    /**
     * 根据员工id查询人员名称
     *
     * @param empId
     * @return
     */
    String selectPeoPleName(@Param("empId") Integer empId);

    /**
     * 根据部门id查询人员数量
     *
     * @param deptId
     * @return
     */
    Integer countPeople(@Param("deptId") Integer deptId);

    /**
     * 查询子分组
     *
     * @param parentId
     * @return
     */
    List<GroupChildrenDO> listGroupId(@Param("parentId") Integer parentId);

    /**
     * 逻辑删除部门
     *
     * @param deptId
     * @return
     */
    int deleteDept(@Param("deptId") Integer deptId);

    /**
     * 查询是否有重复部门
     *
     * @param name
     * @return
     */
    Integer selectDeptName(@Param("name") String name);

    /**
     * 新增部门
     *
     * @param deptDO
     * @return
     */
    int insertSelective(DeptDO deptDO);

    /**
     * 根据部门Id查询版本号
     *
     * @param deptId
     * @return
     */
    int selectVersion(@Param("deptId") Integer deptId);

    int updateByPrimaryKeySelective(DeptDO record);

    /**
     * 查询人员id
     *
     * @return
     */
    List<Integer> listPeopleId();

    /**
     * 删除人员所属部门
     *
     * @param deptId
     * @param epmId
     * @return
     */
    int updatePeoples(@Param("deptId") Integer deptId, @Param("epmId") Integer epmId);


    /**
     * 根据人员id修改所属部门
     *
     * @param deptId
     * @param epmId
     * @return
     */
    int updatePeople(@Param("deptId") Integer deptId, @Param("epmId") Integer epmId);

    /**
     * 根据分组部门查询所有人员信息
     *
     * @return
     */
    List<EmpInfoDTO> listEmpInfo(DeptEmpQuery query);

    /**
     * 查询部门已拥有的人员
     *
     * @param deptId
     * @return
     */
    List<Integer> listHavePeople(@Param("deptId") Integer deptId);

    String deptName(@Param("deptId") Integer deptId);

    List<JSONObject> departments();

    Integer getDeptId(@Param("name") String name);
}
